import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

from pyecharts import options as opts
from pyecharts.charts import Bar

"""
1.读取数据
"""
df = pd.read_excel('./Files/housing.xlsx')
# print(df.info())
# print()
# print(df["MEDV"])

"""
2.使用matplotlib绘制直方图
"""
plt.figure(figsize=(12, 8))
plt.hist(df["MEDV"], bins=100)
plt.show()

"""
3.使用pyecharts画直方图
"""
# 需要自己计算有多少个间隔、以及每个间隔有多少个值
# histogram返回两个数组值:
# hist：它是一个数组，包含了数据分布在每个“桶”或“箱”内的计数（即每个bin内元素的数量）。
# bin_edges：是一个数组，包含了“桶”或“箱”的边界值。它的长度比 hist 数组多1，因为它定义了 hist 中每个bin的边界。
hist, bin_edges = np.histogram(df["MEDV"], bins=100)

# pyecharts的直方图使用bar实现
# 取bins[:-1]，意思是用每个区间的左边元素作为x轴的值
bar = (
    Bar()
    .add_xaxis([str(x) for x in bin_edges[:-1]])
    .add_yaxis("价格分布", [float(x) for x in hist], category_gap=0)
    .set_global_opts(opts.TitleOpts(title="波斯顿房价-价格分布-直方图", pos_left="right"),
                     legend_opts=opts.LegendOpts(is_show=True))
)

bar.render(path='./Files/my_histogram.html')
